/**********************************************************************
 * js工具类
 *
 * @file       JsHelper.js
 * @date       2016-06-28
 * @version    v1.0
 * @author     白剑
 * @company    tfrunning
 **********************************************************************/

"use strict";

/**
 * 方法名:Ajax<br>
 * 功能描述:<br>
 * 创建人: 白剑<br>
 * 创建时间: 2016年6月28日-上午2:19:50<br>
 * 修改历史:  <br>
 * 修改时间             修改人           版本变更           修改说明<br>
 * -----------------------------------------------------<br>
 * @param uri vom.js中定义的路径
 * @param path 后台URI中对应的path
 * @param type GET,POST,PUT,DELETE
 * @param isasync 是否异步调用，默认填写false
 * @param data 非GET情况的向后台传送的数据
 * @param successfunc 成功回调函数
 * @param errorfunc 失败回调函数
 */
function Ajax(uri, path, type, isasync, data, successfunc, errorfunc) {
  $.ajax({
    url: uri + path,
    type: type,
    async: isasync,
    data: data,
    contentType: 'application/json',
    dataType: "json",
    timeout: 45000,
    success: function (data) {
      successfunc(data);
    },
    error: function (xhr, errorInfo, ex) {
      var errMsg = '请求后台服务发生异常，' + ex;
      errorfunc(errMsg);
      console.log(errMsg);
    }
  });
}

/**
 * 方法名:getUrlParameter<br>
 * 功能描述:获得URL中的参数<br>
 * 创建人: 白剑<br>
 * 创建时间: 2016年6月28日-上午9:46:31<br>
 * 修改历史:  <br>
 * 修改时间             修改人           版本变更           修改说明<br>
 * -----------------------------------------------------<br>
 * @returns
 */
function getUrlParameter(type) {
  var reg = new RegExp("(^|&)" + type + "=([^&]*)(&|$)", "i");
  var r = window.location.search.substr(1).match(reg);
  if (r != null)
    { // noinspection JSDeprecatedSymbols
      return unescape(r[2]);
    }
  return null;
}

/**
 * 方法名:isContains<br>
 * 功能描述:判断是否包含字符串<br>
 * 创建人: 白剑<br>
 * 创建时间: 2016年6月28日-上午10:39:22<br>
 * 修改历史:  <br>
 * 修改时间             修改人           版本变更           修改说明<br>
 * -----------------------------------------------------<br>
 * @param str 需要判断的字符串
 * @param substr 包含的字符串
 * @returns {Boolean}
 */
function isContains(str, substr) {
  if(isEmpty(str)) {
    return false;
  }
  return str.indexOf(substr) >= 0;
}

/**
 * 方法名:isEmpty<br>
 * 功能描述:判断对象是否为空<br>
 * 创建人: 白剑<br>
 * 创建时间: 2016年6月28日-下午3:39:12<br>
 * 修改历史:  <br>
 * 修改时间             修改人           版本变更           修改说明<br>
 * -----------------------------------------------------<br>
 * @param obj
 * @returns {Boolean}
 */
function isEmpty(obj) {
  return obj == null || obj === '';
}

/**
 * 方法名:getForm<br>
 * 功能描述:获取指定表单ID的值<br>
 * 创建人: 白剑<br>
 * 创建时间: 2016年8月11日-下午3:13:10<br>
 * 修改历史:  <br>
 * 修改时间             修改人           版本变更           修改说明<br>
 * -----------------------------------------------------<br>
 * @param formId
 */
function getForm(formId) {
  var o = {};
  var a = $('#' + formId).serializeArray();
  $.each(a, function () {
    if (o[this.name] !== undefined) {
      if (!o[this.name].push) {
        o[this.name] = [o[this.name]];
      }
      o[this.name].push(this.value || '');
    } else {
      o[this.name] = this.value || '';
    }
  });
  return o;
}

/**
 * 方法名:___anonymous<br>
 * 功能描述:设置表单值<br>
 * 创建人: 白剑<br>
 * 创建时间: 2016年8月11日-下午3:24:39<br>
 * 修改历史:  <br>
 * 修改时间             修改人           版本变更           修改说明<br>
 * -----------------------------------------------------<br>
 * @param $
 */
(function ($) {
  $.fn.setForm = function (jsonValue) {
    var obj = this;
    $.each(jsonValue, function (name, ival) {
      var $oinput = obj.find("input[name=" + name + "]");
      if ($oinput.attr("type") === "radio" || $oinput.attr("type") === "checkbox") {
        $oinput.each(function () {
          if (Object.prototype.toString.apply(ival) === '[object Array]') { //是复选框，并且是数组
            for (var i = 0; i < ival.length; i++) {
              if ($(this).val() === ival[i]) {
                $(this).attr("checked", "checked")
              }
            }
          } else {
//						if ($(this).val() == ival) {
//							$(this).attr("checked", "checked");
//						}
            $(this).attr("checked", "checked");
          }
        });
      } else {
        obj.find("[name=" + name + "]").val(ival);
      }
    });
  }
})(jQuery);

(function ($) {
  $.fn.tfload = function( url, params, callback ) {
    var selector, type, response,
      self = this,
      off = url.indexOf( " " );
    if ( off > -1 ) {
      selector = stripAndCollapse( url.slice( off ) );
      url = url.slice( 0, off );
    }
    if ( $.isFunction( params ) ) {
      callback = params;
      params = undefined;
    } else if ( params && typeof params === "object" ) {
      type = "POST";
    }
    if ( self.length > 0 ) {
      $.ajax( {
        url: url,
        async: false,
        type: type || "GET",
        dataType: "html",
        data: params
      } ).done( function( responseText ) {
        response = arguments;
        self.html( selector ?
          $( "<div>" ).append( $.parseHTML( responseText ) ).find( selector ) :
          responseText );
      } ).always( callback && function( jqXHR, status ) {
        self.each( function() {
          callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
        } );
      } );
    }
    return this;
  };
})(jQuery);

/**
 * 方法名:resetForm<br>
 * 功能描述:清空表单<br>
 * 创建人: 白剑<br>
 * 创建时间: 2016年8月11日-下午3:34:20<br>
 * 修改历史:  <br>
 * 修改时间             修改人           版本变更           修改说明<br>
 * -----------------------------------------------------<br>
 * @param formId
 */
function resetForm(formId) {
  $(':input', '#' + formId).not(':button, :submit, :reset').val('')
    .removeAttr('checked').removeAttr('selected');
}

/**
 * 禁用表单所有域
 */
function disableForm(formId) {
  $(':input', '#' + formId).not(':button, :submit, :reset')
    .attr("disabled", "disabled");
}

/**
 * 启用表单所有域
 */
function enableForm(formId) {
  $(':input', '#' + formId).not(':button, :submit, :reset')
    .removeAttr("disabled");
}

/**
 * 重置并且禁用表单，reset and disabled
 */
function radForm(formId) {
  resetForm(formId);
  disableForm(formId);
}

/**
 * 方法名:Format<br>
 * 功能描述:日期格式化<br>
 * 修改历史:  <br>
 * 修改时间             修改人           版本变更           修改说明<br>
 * -----------------------------------------------------<br>
 */
Date.prototype.format = function (format) {
  var date = {
    "M+": this.getMonth() + 1,
    "d+": this.getDate(),
    "h+": this.getHours(),
    "m+": this.getMinutes(),
    "s+": this.getSeconds(),
    "q+": Math.floor((this.getMonth() + 3) / 3),
    "S+": this.getMilliseconds()
  };
  if (/(y+)/i.test(format)) {
    format = format.replace(RegExp.$1, (this.getFullYear() + '')
      .substr(4 - RegExp.$1.length));
  }
  for (var k in date) {
    if (new RegExp("(" + k + ")").test(format)) {
      format = format.replace(RegExp.$1, RegExp.$1.length === 1 ? date[k]
        : ("00" + date[k]).substr(("" + date[k]).length));
    }
  }
  return format;
};


/**
 * 格式化yyyyMMdd类型的日期为yyyy-MM-dd
 * @param strDate
 * @returns
 */
function DateFormat(strDate) {
  strDate = strDate + "";
  var date = new Date();
  date.setFullYear(strDate.substring(0,4), strDate.substring(4,6) - 1, strDate.substring(6,8));
  return date.format('yyyy-MM-dd');
}

/**
 * @param href
 */
function pageTurn(href) {
  window.location.href = href;
}

/**
 * 跳转到新tab标签，如果需要传值，直接在url后面拼即可
 * @param title
 * @param url
 */
function pageLink(title, url) {
  var tabInfo = {
    name: title,
    url: url
  };
  top.window.$.site.contentTabs.buildTab(tabInfo);
  top.window.$.site.contentTabs.enable(top.window.$('ul.con-tabs>li.active'));
}

/**
 * 关闭激活的标签，只能关闭当前激活的标签，不能指定关闭。
 */
function closeActiveTab() {
  top.window.$.site.contentTabs.closeTab(top.window.$('ul.con-tabs>li.active'));
}

/**
 * 方法名:stopBubble<br>
 * 功能描述:阻止冒泡事件，再要调用的具体事件之前调用此方法<br>
 * 创建人: 白剑<br>
 * 创建时间: 3 May 2017-11:25:36<br>
 * 修改历史:  <br>
 * 修改时间             修改人           版本变更           修改说明<br>
 * -----------------------------------------------------<br>
 * @param e
 */
function stopBubble(e) {
  //如果提供了事件对象，则这是一个非IE浏览器
  if ( e && e.stopPropagation ) {
    //因此它支持W3C的stopPropagation()方法
    e.stopPropagation();
  } else {
    //否则，我们需要使用IE的方式来取消事件冒泡
    window.event.cancelBubble = true;
  }
}

// 清除格式
function unFormatDate(datestr) {
  if(!isContains(datestr, '-')) {
    return datestr;
  }
  var tmp = datestr.split('-');
  return tmp[0] + tmp[1] + tmp[2];
}

// 获得当前日期YYYYMMDD
function getNowDate() {
  var date = new Date();
  var month = date.getMonth() + 1;
  var strDate = date.getDate();
  if (month >= 1 && month <= 9) {
    month = "0" + month;
  }
  if (strDate >= 0 && strDate <= 9) {
    strDate = "0" + strDate;
  }
  return date.getFullYear() + month + strDate;
}

// 数据字典选项
function getOptionList(optlist, key, value, flag) {
  var options = "";
  if(flag === undefined) {
    flag = true; // flag参数不传默认显示key值
  }
  for (var i = 0; i < optlist.length; i++) {
    var optData = optlist[i];
    if(flag) {
      options += '<option value="'+optData[key]+'">['+optData[key]+']'+optData[value]+'</option>';
    } else {
      options += '<option value="'+optData[key]+'">'+optData[value]+'</option>';
    }
  }
  return options;
}

/**
 * 格式化laydate
 */
function unFormatRange(dateRange) {
  var subStr = dateRange.replace(/-/g, "");
  return subStr.split(' ~ ');
}